package com.boot.trace1;

import org.apache.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * 创建应用主类，并实现 /trace-1接口，并使用 RestTemplate 调用 trace-2 应用的接口
 *
 * 启动  eureka-server、trance-1、trance-2 ，访问  http://localhost:9101/trace-1
 *
 * 分布式服务跟踪（入门）
 * 实现跟踪，trace-1和 trace-2 的 pom.xml 中引入 spring-cloud-starter-sleuth 依赖
 *
 * 分布式服务跟踪（整合logstash）
 * trace-1和 trace-2 的 pom.xml 中引入 logstash-logback-encoder依赖
 * 创建 bootstrap.properties 、logback-spring.xml
 *
 * 分布式服务跟踪（整合zipkin）
 * 搭建 zipkin-server 项目 ，并启动
 * trace-1和 trace-2 的 pom.xml 中引入 spring-cloud-sleuth-zipkin 依赖
 * application.properties中增加 Zipkin Server 的配置信息
 *
 * 当发现log信息：  INFO [trace-1,4d0f47e2f08fed45,4d0f47e2f08fed45,true]
 * 最后一个值为true的时候，说明该跟踪信息会输出给 Zipkin Server
 * 去Zipkin Server的管理页面中选择合适的查询条件后，点击Find Traces，就可以查询出刚才在日志中出现的跟踪信息了
 */
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class Trace1Application {

	public static void main(String[] args) {
		SpringApplication.run(Trace1Application.class, args);
	}

	private final Logger logger = Logger.getLogger(getClass());

	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}

	@RequestMapping(value = "/trace-1", method = RequestMethod.GET)
	public String trace() {
		logger.info("===<call trace-1>===");
		return restTemplate().getForEntity("http://trace-2/trace-2", String.class).getBody();
	}
}
